﻿using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace DelegateClass
{
    class Program
    {
        static void Main(string[] args)
        {
            WorkToDelegate.Work(new [] {"Tadam", "Param", "Pam", "Pam"}, "AAA");
            Console.WriteLine();

            //Регистрация делегатов на MyNewDelegate
            MyNewDelegate del = delegate(String[] mas, String stroka) { Console.WriteLine(String.Join(stroka, mas)); };
            del += delegate(String[] mas, String stroka) { Console.WriteLine(String.Join(stroka.ToLower(), mas)); };
            del += delegate(String[] mas, String stroka) 
            {
                foreach (var i in mas)
                {
                    Console.WriteLine(i == stroka);
                }
            };
            del(new[] { "Tadam", "Param", "Pam", "Pam" }, "AAA");
            Console.WriteLine();

            //Использование стандартного делегата
            Action<String[], String> f = (mas, stroka) => { Console.WriteLine(String.Join(stroka, mas)); };
            f( new [] {"Tadam", "Param", "Pam", "Pam" }, "AAA");

            Console.ReadLine();
        }
    }

    //Объявление методка-класса, выполняющего функцию делегата
    public class WorkToDelegate
    {
        public static void Work(String[] massiv, String Stroka)
        {
            String str = String.Join(Stroka, massiv);
            Console.WriteLine(str);
        }
    }

    //Объявление делегата
    public delegate void MyNewDelegate(String [] massiv, String Stroka);
}
